//
//  NSString+Extension.h
//  JTTest
//
//  Created by Kenter on 2019/7/30.
//  Copyright © 2019年 Hjt830. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

#pragma mark ====================== 判断是否为空字符串、空数组、空字典 ======================

/**
 *  是否是空字符串 或者 不是字符串
 */
#define JTIsEmptyString(str)    ((!(str) \
                                || ([(str) isEqual:[NSNull null]]) \
                                || (![(str) isKindOfClass:[NSString class]]) \
                                || ([(str) isKindOfClass:[NSString class]] && 0 == (str).length) \
                                || ([(str) isKindOfClass:[NSString class]] && ([(str) isEqualToString:@""] || [(str) isEqualToString:@"null"] || [(str) isEqualToString:@"<null>"]))) \
                                ? YES : NO)
/**
 *  是否是空数组  或者 不是数组
 */
#define JTIsEmptyArray(arr)     ((!(arr) \
                                || ([(arr) isEqual:[NSNull null]]) \
                                || (![(arr) isKindOfClass:[NSArray class]]) \
                                || ([(arr) isKindOfClass:[NSArray class]] && 0 == (arr).count)) \
                                ? YES : NO)
/**
 *  是否是空字典  或者 不是字典
 */
#define JTIsEmptyDictionary(dic)    ((!(dic) \
                                    || ([(dic) isEqual:[NSNull null]]) \
                                    || (![(dic) isKindOfClass:[NSDictionary class]]) \
                                    || ([(dic) isKindOfClass:[NSDictionary class]] && 0 == (dic).count)) \
                                    ? YES : NO)


#define JTIsNull(obj)   ([(obj) isEqual:[NSNull null]] ? nil : obj)



@interface NSString (Extension)

#pragma mark ====================== MD5 =======================

/**
 *  @brief 获取32位小写MD5加密串
 */
- (NSString *)lowerMD5String_32;

/**
 *  @brief 获取32位大写MD5加密串
 */
- (NSString *)upperMD5String_32;

- (id)MD5;

- (NSString *)md5String;

#pragma mark ====================== AES128 =======================

/** @brief aes 128位 CBC PKCS7Padding加密
 *  @param key 加密秘钥
 *  @param iv 加密向量
 */
- (NSString *)aes128_encrypto:(NSString *)key iv:(NSString *)iv;

/** @brief aes 128位 CBC PKCS7Padding解密
 *  @param key 解密秘钥
 *  @param iv 解密向量
 */
- (NSString *)aes128_decrypto:(NSString *)key iv:(NSString *)iv;


#pragma mark ====================== HMAC =======================

/**
 *  HMAC签名
 */
- (NSString *)hmacSHA256WithSecret:(NSString *)secret;



#pragma mark ====================== URLEncode =======================

- (NSString *)URLEncodedString;

- (NSString *)URLDecodedString;


#pragma mark ====================== 随机32位字符串 =======================

+ (NSString *)creatUUID;

#pragma mark ====================== 正则表达式 =======================

// 是否为纯中文
- (BOOL)isChinese;

// 是否包含中文
- (BOOL)includeChinese;

// 是否是邮箱
- (BOOL)isEmail;

// 是否是中国大陆手机号码
- (BOOL)isChinaPhoneNumber;

#pragma mark ====================== 中文转拼音 =======================

- (NSString *)convertToPinyin;

- (NSString *)pinyinString;

@end

NS_ASSUME_NONNULL_END
